import Fetch from '../api/request'
import config from 'config'

module.exports = class ServiceController {
  /**
   * 环境列表
   * @param ctx
   * @returns {Promise<void>}
   */
  static async service(ctx) {
    let errorInfo = null
    let resultRet = {}
    let environmentId = ''

    // 获取环境列表
    await Fetch.get({
      url: '/api/environments',
      ctx
    }).then((result) => {
      resultRet.environment = result
    }).catch((err) => {
      errorInfo = err.message
    })

    // 判断environmentId是否在请求参数中存在
    if (!ctx.checkQuery('environmentId').value) {
      environmentId = resultRet.environment.data[0].environmentId
    } else {
      environmentId = ctx.checkQuery('environmentId').value // get请求获取传参
    }

    // 获取环境详情
    await Fetch.get({
      url: '/api/environments/' + environmentId + '/details',
      ctx
    }).then((result) => {
      resultRet.environmentDeatil = result
    }).catch((err) => {
      errorInfo = err.message
    })

    if (errorInfo) {
      ctx.body = ctx.util.ok('', 500, errorInfo)
      return
    }
    ctx.body = resultRet
  }

  /**
   * 获取服务基本信息
   * @param {*} ctx
   */
  static async getServiceInfo(ctx) {
    let environmentId = ctx.checkQuery('environmentId').value
    let serviceId = ctx.checkQuery('serviceId').value
    let groupId = ctx.checkQuery('groupId').value
    let ret = {}
    await Fetch.get({
      url: '/api/environments/' + environmentId + '/groups/' + groupId + '/services/' + serviceId,
      ctx
    }).then((res) => {
      ret = res
    }).catch((err) => {
      ctx.errorHandle(ctx, err)
    })

    ret.url = config.get('wsUrl.basic')
    ctx.body = ret
  }

  /**
   * 服务修改
   * @param {*} ctx
   */
  static async serviceMani(ctx) {
    let ret = {}
    if (ctx.request.method === 'PUT') {
      // 修改服务
      await Fetch.put({
        url: ctx.request.url,
        ctx,
        params: ctx.request.body
      }).then((res) => {
        ret = res
      }).catch((err) => {
        ctx.errorHandle(ctx, err)
      })
    } else if (ctx.request.method === 'DELETE') {
      // 删除服务
      await Fetch.delete({
        url: ctx.request.url,
        ctx
      }).then((res) => {
        ret = res
      }).catch((err) => {
        ctx.errorHandle(ctx, err)
      })
    } else if (ctx.request.method === 'PATCH') {
      // 修改服务
      await Fetch.patch({
        url: ctx.request.url,
        ctx,
        params: ctx.request.body
      }).then((res) => {
        ret = res
      }).catch((err) => {
        ctx.errorHandle(ctx, err)
      })
    }

    ctx.body = ret
  }

  /**
   * 启动服务
   * @param {*} ctx
   */
  static async serviceStart(ctx) {
    let ret = {}
    await Fetch.post({
      url: ctx.request.url,
      ctx
    }).then((res) => {
      ret = res
    }).catch((err) => {
      ctx.errorHandle(ctx, err)
    })
    ctx.body = ret
  }

  /**
   * 停止服务
   * @param {*} ctx
   */
  static async serviceStop(ctx) {
    let ret = {}
    await Fetch.post({
      url: ctx.request.url,
      ctx
    }).then((res) => {
      ret = res
    }).catch((err) => {
      ctx.errorHandle(ctx, err)
    })
    ctx.body = ret
  }

  /**
   * 重启服务
   * @param {*} ctx
   */
  static async serviceReboot(ctx) {
    let ret = {}
    await Fetch.delete({
      url: ctx.request.url,
      ctx
    }).then((res) => {
      ret = res
    }).catch((err) => {
      ctx.errorHandle(ctx, err)
    })
    ctx.body = ret
  }

  /**
   * 获取服务列表
   * @param {*} ctx
   */
  static async list(ctx) {
    let ret = {}
    await Fetch.get({
      url: ctx.request.url,
      ctx
    }).then((res) => {
      ret = res
    }).catch((err) => {
      ctx.errorHandle(ctx, err)
    })
    ctx.body = ret
  }

  /**
   * 镜像升级
   * @param {*} ctx
   */
  static async imageUpdate(ctx) {
    let ret = {}
    await Fetch.get({
      url: ctx.request.url,
      ctx
    }).then((res) => {
      ret = res
    }).catch((err) => {
      ctx.errorHandle(ctx, err)
    })
    ctx.body = ret
  }

  /**
   * 容器
   * @param {*} ctx
   */
  static async pod(ctx) {
    let ret = {}
    if (ctx.request.method === 'GET') {
      await Fetch.get({
        url: ctx.request.url,
        ctx
      }).then((res) => {
        ret = res
      }).catch((err) => {
        ctx.errorHandle(ctx, err)
      })
    }
    ctx.body = ret
  }
}
